package com.warmlight.voicepacket.dbmanager;

import android.content.Context;

import com.warmlight.voicepacket.dao.DaoMaster;
import com.warmlight.voicepacket.dao.DaoSession;
import com.warmlight.voicepacket.dbhelp.MyOpenHelper;

import org.greenrobot.greendao.identityscope.IdentityScopeType;

/**
 * DBManager 为greendao数据库的初始化和管理类。操作数据库用到的为 DBManager.getDaoSession(context).getDBFloatPlaylistDao().XXX() 进行操作
 * 详情请参考DBFloatPlayListDaoHelp 或者 DBFloatPlayListDetailDaoHelp
 * 实际进行数据库增删改查操作均在DBFloatPlayListDaoHelp 或者 DBFloatPlayListDetailDaoHelp 中，此工具为手动实现。主要是方便统一管理。
 *
 * greendao 查询操作符
 *eq :  Properties.YearOfBirth.eq(2001): 等于
 notEq ： 不等于
 like:模糊查询 记住模糊查询，string要用夹在%key%中间。
 * BETWEEN ... AND ... ...和...之间。
 IN（..., ..., ...） 在给出的value的范围内的符合项
 gt 大于
 ge 大于等于
 lt 小于
 le 小于等于
 isNull 不是空的
 */
public class DBManager {


    // 是否加密
    public static final boolean ENCRYPTED = true;

    private static final String DB_NAME = "voice.db";
    private static DBManager mDbManager;
//    private static DaoMaster.DevOpenHelper mDevOpenHelper;
    private static DaoMaster mDaoMaster;
    private static DaoSession mDaoSession;

    private Context mContext;

    private DBManager(Context context) {
        this.mContext = context;
        // 初始化数据库信息
//        mDevOpenHelper = new DaoMaster.DevOpenHelper(context, DB_NAME);
        getDaoMaster(context);
        getDaoSession(context);
    }

    public static DBManager getInstance(Context context) {
        if (null == mDbManager) {
            synchronized (DBManager.class) {
                if (null == mDbManager) {
                    mDbManager = new DBManager(context);
                }
            }
        }
        return mDbManager;
    }

    /**
     * 获取可读数据库
     *
     * @param context
     * @return
     */
//    public static SQLiteDatabase getReadableDatabase(Context context) {
//        if (null == mDevOpenHelper) {
//            getInstance(context);
//        }
//        return mDevOpenHelper.getReadableDatabase();
//    }

    /**
     * 获取可写数据库
     *
     * @param context
     * @return
     */
//    public static SQLiteDatabase getWritableDatabase(Context context) {
//        if (null == mDevOpenHelper) {
//            getInstance(context);
//        }
//
//        return mDevOpenHelper.getWritableDatabase();
//    }

//    /**
//     * 获取DaoMaster
//     *
//     * @param context
//     * @return
//     */
//    public static DaoMaster getDaoMaster(Context context) {
//        if (null == mDaoMaster) {
//            synchronized (DBManager.class) {
//                if (null == mDaoMaster) {
//                    mDaoMaster = new DaoMaster(getWritableDatabase(context));
//                }
//            }
//        }
//        return mDaoMaster;
//    }

    /**
     * 获取DaoMaster
     *
     * 判断是否存在数据库，如果没有则创建数据库
     * @param context
     * @return
     */
    public static DaoMaster getDaoMaster(Context context) {
        if (null == mDaoMaster) {
            synchronized (DBManager.class) {
                if (null == mDaoMaster) {
                    MyOpenHelper helper = new MyOpenHelper(context,DB_NAME,null);
                    mDaoMaster = new DaoMaster(helper.getWritableDatabase());
                }
            }
        }
        return mDaoMaster;
    }

    /**
     * 获取DaoSession
     *
     * @param context
     * @return
     */
    public static DaoSession getDaoSession(Context context) {
        if (null == mDaoSession) {
            synchronized (DBManager.class) {
                mDaoSession = getDaoMaster(context).newSession(IdentityScopeType.None);
            }
        }
        return mDaoSession;
    }
}
